package com.wtwd.campus.netty;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

public class ServerChannelInitializer extends ChannelInitializer<Channel> {
    @Override
    protected void initChannel(Channel channel) throws Exception {
        // 遇到了"]"就表示读到了最后，两个结合在一起用
    	ByteBuf buf = Unpooled.copiedBuffer("#".getBytes());
    	// 这里的8192标识单条消息的最大长度，如果长度达到后任然没有读到，抛出TooLongFrameException,防止由于异常代码流失导致内存溢出
    	channel.pipeline().addLast(new DelimiterBasedFrameDecoder(819200, buf));
        // 编解码处理
//      channel.pipeline().addLast("decoder",new MessageDecoder());
        channel.pipeline().addLast("decoder",new StringDecoder());
        channel.pipeline().addLast("encoder",new MessageEncoder());
        //经过编码解码处理后，收到的bytebuf已经变成自己的bean了，这个handler的先后顺序有讲究的，除非把资源释放，后面的handler才能拿到
        channel.pipeline().addLast(new ServerIdleHandler());
        channel.pipeline().addLast(new ServerHandler());
    }
}